/**
 * WebSocket事件常量定义
 * 统一管理所有WebSocket事件类型
 */

// WebSocket命令类型
export const WEBSOCKET_COMMANDS = {
  // 用户状态相关
  ONLINE_STATUS: 30000,        // 上线下线通知
  FRIEND_REQUEST: 30002,       // 发送添加请求
  FRIEND_ACCEPT: 30003,        // 同意添加请求
  FRIEND_INIT: 30006,          // 初始化好友栏
  
  // 消息相关
  SINGLE_CHAT: 30001,          // 单人聊天
  GROUP_CHAT: 30005,           // 群聊信息
  MESSAGE_RETRACT: 30004,      // 撤回消息
  MESSAGE_READ_SYNC: 30010,    // 已读同步
  
  // 通话相关
  VIDEO_CALL: 30007,           // 视频通话
  VOICE_CALL: 30008,           // 语音通话
  
  // 群组相关
  GROUP_DISBAND: 30009,        // 解散群聊通知
  
  // 系统相关
  ANNOUNCEMENT: 50001,         // 公告发布
  AMOUNT_UPDATE: 90001,        // 金额更新
  FORCE_OFFLINE: 40002         // 被迫下线通知
};

// WebSocket事件标签
export const WEBSOCKET_COMMAND_LABELS = {
  [WEBSOCKET_COMMANDS.ONLINE_STATUS]: '在线状态',
  [WEBSOCKET_COMMANDS.FRIEND_REQUEST]: '好友请求',
  [WEBSOCKET_COMMANDS.FRIEND_ACCEPT]: '好友接受',
  [WEBSOCKET_COMMANDS.FRIEND_INIT]: '好友初始化',
  [WEBSOCKET_COMMANDS.SINGLE_CHAT]: '单聊消息',
  [WEBSOCKET_COMMANDS.GROUP_CHAT]: '群聊消息',
  [WEBSOCKET_COMMANDS.MESSAGE_RETRACT]: '消息撤回',
  [WEBSOCKET_COMMANDS.MESSAGE_READ_SYNC]: '已读同步',
  [WEBSOCKET_COMMANDS.VIDEO_CALL]: '视频通话',
  [WEBSOCKET_COMMANDS.VOICE_CALL]: '语音通话',
  [WEBSOCKET_COMMANDS.GROUP_DISBAND]: '群组解散',
  [WEBSOCKET_COMMANDS.ANNOUNCEMENT]: '系统公告',
  [WEBSOCKET_COMMANDS.AMOUNT_UPDATE]: '金额更新',
  [WEBSOCKET_COMMANDS.FORCE_OFFLINE]: '强制下线'
};

// WebSocket连接状态
export const WEBSOCKET_STATUS = {
  CONNECTING: 'connecting',
  CONNECTED: 'connected',
  DISCONNECTED: 'disconnected',
  RECONNECTING: 'reconnecting',
  ERROR: 'error'
};

// WebSocket重连配置
export const WEBSOCKET_RECONNECT_CONFIG = {
  MAX_RECONNECT_ATTEMPTS: 5,
  RECONNECT_INTERVAL: 3000,
  MAX_RECONNECT_INTERVAL: 30000,
  RECONNECT_DECAY: 1.5
};

// WebSocket消息队列配置
export const WEBSOCKET_QUEUE_CONFIG = {
  MAX_QUEUE_SIZE: 100,
  BATCH_SIZE: 10,
  BATCH_DELAY: 50,
  RETRY_ATTEMPTS: 3,
  RETRY_DELAY: 1000
};

export default {
  WEBSOCKET_COMMANDS,
  WEBSOCKET_COMMAND_LABELS,
  WEBSOCKET_STATUS,
  WEBSOCKET_RECONNECT_CONFIG,
  WEBSOCKET_QUEUE_CONFIG
};
